export default {
  namespaced: true,
  // 数据
  state: ()  => ({
    // 存放购物车商品列表
    cart: JSON.parse(uni.getStorageSync('cart') || '[]')
  }),
  
  // 同步方法
  mutations: {
    // 加入购物车方法
    addToCart(state, goodsInfo) {
      const findRes = state.cart.find((t) => t.goods_id === goodsInfo.goods_id)
      if (!findRes) {
        // 购物车找不到商品
        state.cart.unshift(goodsInfo)
      } else {
        findRes.goods_count++
      }
      // 调用数据持久化
      this.commit('m_cart/savaStorage')
    },
    
    // 购物车数据持久化
    savaStorage(state) {
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    },
    
    // 修改勾选状态
    updateState(state, goods) {
      // 在数组中先查找到当前商品
      const findResult = state.cart.find(t => t.goods_id === goods.goods_id)
      if (findResult) { // 能找到就赋予找到的商品当前状态
        findResult.goods_state = goods.goods_state
      }
    },
    
    // 修改购物车中商品数量
    updateNum(state, goods) {
      const findResult = state.cart.find(t => t.goods_id === goods.goods_id)
      if (findResult) {
        findResult.goods_count = goods.goods_count
        this.commit('m_cart/savaStorage')
      }
    },
    
    // 根据id 删除对应商品
    removeGoods(state, id)  {
      state.cart = state.cart.filter(t => t.goods_id !== id)
      this.commit('m_cart/savaStorage')
    },
    
    // 改变所有 state 中 car 的所有选择状态
    updateAllState(state, newState) {
      state.cart.forEach(t => t.goods_state = newState)
      // 修改后 重新数据持久化
      this.commit('m_cart/savaStorage')
    }
  },
  
  // 计算属性
  getters: {
    // 商品总数量
    goods_total(state) { // 购物车数量
      let t = 0
      state.cart.forEach(item => t += item.goods_count)
      return t
    },
    
    // 商品勾选数量合计
    checkedCount(state) {
      return state.cart.filter(t => t.goods_state).reduce((total, t) => total += t.goods_count, 0)
    },
    
    // 商品总价
    computeAllGoodsPrice(state) {
      return state.cart.filter(t => t.goods_state).reduce((total, t) => total += t.goods_count * t.goods_price, 0).toFixed(2)
    }
  },
  
  // 异步方法
  actions: {
    
  },
  
}